home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-3323 / protocol.gem / 68000 / choice.s < prev    next >
Text File  |  1987-04-21  |  7KB  |  194 lines

  1. ********************************************************
  2. *           EXTRAIT DE LA BIBLIOTHEQUE TUBE GEM        *
  3. *                  FICHIER "CHOICE.S"                  *
  4. *              VERSION 2.00 (23 mars 1991)             *
  5. ********************************************************
  6. CHOICE_TUBE:    
  7.     MOVEM.L    D2-D7/A1-A6,-(SP)
  8.  
  9.     ADDA.L    #6,A0   pour sauter l'en-téte
  10.     
  11.     MOVE.L    A0,A6   sauve début du tableau
  12.     MOVE.L    A6,A5
  13.     BSR    SOUFFLAGE   souffle dans le tuyau GEM
  14.     RSRC_GADDR    #0,#TUBE        cherche adresse formulaire
  15.     MOVE.L    ADDR_OUT,A0    sauve l'adresse
  16.     MOVE.L    A0,ADR_FORM    adr du formulaire
  17.     FORM_CENTER   A0    centre le formulaire
  18.     MOVEM.W    INT_OUT+2,D0-D3    récupére les dimensions
  19.     MOVEM.W    D0-D3,X_TUBE         et les sauve
  20.     CLR.W    DIAL_TUBE    form_dial    non-exécuté
  21.     BSR    HIDE_ALL       cache tous les boutons
  22.     
  23.     LEA    TAB_OKAPID,A0  tableau des apid par bouton
  24.     MOVE.L    A0,PTN_OKAPID
  25.     CLR.W    D5    init le compteur des APP_ID
  26.     MOVE.W    #TUBE1,D7  premier bouton du formulaire
  27.     CLR.W    MONO_FLAG    flag si je suis seul   
  28. HOP    MOVE.W    (A5)+,D6    préléve AP_ID
  29.     ADDQ.W    #1,D5     et le compte
  30.     CMP.W    #$FFFF,D6   fin du tableau ?
  31.     BEQ.S    .HOP1     oui
  32. * Sommes-nous en train de dépasser la fin du tableau ?
  33.     CMP.W    -2(A6),D5    compare à nbr APP_ID autorisé
  34.     BLS.S    .ICI    encore bon, continuons
  35. * Soit nous sommes sur le flag de fin, soit nous sommes en
  36. * fin de tableau (d'aprés le nbr d'APP_ID autorisé).
  37. .HOP1    MOVE.L    A6,A5     ré-init
  38.     CLR.W    D5    remet à 0 compteur d'APP_ID
  39.     CMP.W    #TUBE1,D7  encore au début ?
  40.     BNE    GERE_FORMTUB  non -> gérer le formulaire
  41. * Si MONO_FLAG vaut toujours 0, c'est qu'il n'y a pas de
  42. * correspondant mais qu'en plus nous ne nous sommes pas trouvé!
  43.     TST.W    MONO_FLAG    
  44.     BNE.S    HOP
  45. * Suivant la valeur de JY_SUIS nous savons si nous
  46. * sommes théoriquement dans la liste ou non...
  47.     CMP.W    #$FFFF,JY_SUIS
  48.     BEQ    NOBODY    je n'y suis pas...
  49.     FORM_ALERT    #1,#ALERTE_TUB1   tableau endommagé, bye bye
  50.     BRA    NO_CHOICETUBE
  51.  
  52. * Nous avons lu un APP_ID qui n'est pas le flag de fin et nous
  53. * ne sommes pas en bout de liste.
  54. .ICI    CMP.W    APP_ID,D6   c'est le mien ?
  55.     BNE.S    NOT_MINE
  56.     CMP.W    #$FFFF,MONO_FLAG   je me suis déja trouvé ?
  57.     BNE.S    NO_ME
  58. * Nous sommes seuls, nous prévenons l'utilisateur avec un message
  59. * différent suivant que nous testions 300 ou 500 
  60. NOBODY    MOVE.W    52(SP),D0    type de message à traiter
  61.     CMP.W    #500,D0
  62.     BEQ.S    .ICI_500
  63.     FORM_ALERT    #1,#ALERTE_TUB2     je suis seul! (300)
  64.     BRA     NO_CHOICETUBE
  65. .ICI_500    FORM_ALERT    #1,#ALERTE_TUB2BIS  je suis seul! (500)
  66.     BRA     NO_CHOICETUBE
  67. * Nous notons que nous nous sommes trouvé dans la liste
  68. NO_ME    MOVE.W    #$FFFF,MONO_FLAG
  69.     BRA    HOP    et nous recommençons
  70. * Nous pouvons écrire à cet APP_ID
  71. NOT_MINE    LEA    MESSAGEBUF,A0
  72.     MOVE.W    52(SP),D0           300 ou 500
  73.     MOVE.W    D0,(A0)+       es-tu compatible?
  74.     MOVE.W    APP_ID,(A0)+      mon ap_id
  75.     MOVE.L    #0,(A0)+       le reste    
  76.     MOVE.L    #0,(A0)+        est mis
  77.     MOVE.L    #0,(A0)+        à zéro
  78.     APPL_WRITE  D6,#16,#MESSAGEBUF
  79. * Attendons la réponse...
  80. NEXT_MULTI    EVNT_MULTI    #%110000,#1,#1,#1,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#MESSAGEBUF,#500
  81.     BTST    #4,D0      événement message ?
  82.     BNE    .ICI2      oui donc lisons-le
  83.     BTST    #5,D0      événement timer ?
  84.     BNE    HOP        oui donc timer-out, passons au prochain            
  85.     BRA    NEXT_MULTI rien de valable, attendons!
  86. * Test de l'événement message.
  87. .ICI2    LEA    MESSAGEBUF,A0
  88.     MOVE.W    52(SP),D0
  89.     ADDQ.W    #1,D0      pour faire 301 ou 501
  90.     CMP.W    (A0),D0    c'est une réponse 'pas compatible'?
  91.     BEQ    HOP        oui donc passons à l'ap_id suivant
  92.     ADDQ.W    #2,D0       pour faire 303 ou 503
  93.     CMP.W    (A0),D0       c'est une réponse 'je suis compatible'?
  94.     BNE    NEXT_MULTI  non, recommencons l'attente,
  95. * parce que cela peut-étre un message de redraw pour une de nos fenétre,
  96. * mais ceci ne nous interesse pas pour le moment.
  97.     CMP.W    2(A0),D6    c'est le bon correspondant ?
  98.     BNE    HOP
  99.     MOVE.L    6(A0),A4    début des phrases identificatrices
  100.     CLR.W    D4          donc identif. 0
  101.     MOVE.W    #$EEEE,MONO_FLAG   il y a d'autres applications!
  102. * Cherchons l'adresse du bouton  (résultat en A0)
  103. NEXT_BUTTON
  104.     MOVE.L    ADR_FORM,A0
  105.     OBJECT    A0,D7,A0,D0
  106.     MOVE.W    #$15,8(A0)    selectable, exit et r_button
  107.     MOVE.L    12(A0),A0     adr dest du texte
  108.     MOVE.W    #31,D0    le descripteur est sur 32 octets
  109. .LOOP    MOVE.B    (A4)+,(A0)+   met en place le descripteur
  110.     DBF    D0,.LOOP
  111. * Rangement dans le tableau l'APID et le numéro de descripteur
  112.     MOVE.L    PTN_OKAPID,A0
  113.     MOVE.W    D6,(A0)+      apid
  114.     MOVE.W    D4,(A0)+      numéro du descripteur
  115.     MOVE.L    A0,PTN_OKAPID
  116.     ADDQ.W    #1,D4    descripteur suivant    
  117.     CMP.W    #TUBE5,D7    c'était le dernier bouton ?
  118.     BEQ    GERE_FORMTUB
  119.     ADDQ.W    #1,D7
  120. * Je préléve le séparateur de phrase, en le sautant
  121.     MOVE.W    (A4),D0 
  122.     CMP.W    #$00FF,D0  c'était la dernière phrase ?
  123.     BEQ    HOP        oui donc on charge une nouvelle liste
  124.     ADDA.L    #2,A4    Saut de separateur
  125.     BRA    NEXT_BUTTON  non --> continue le remplissage
  126. * Le formulaire est rempli, allons le gérer    
  127. GERE_FORMTUB
  128. * Nous testons une bascule pour faire un form_dial
  129. * une seule fois.
  130.     TST.W    DIAL_TUBE
  131.     BNE.S    .NO_DIAL
  132.     FORM_DIAL    #0,#0,#0,#0,#0,X_TUBE,Y_TUBE,W_TUBE,H_TUBE
  133.     NOT.W    DIAL_TUBE
  134. .NO_DIAL    MOVE.L    ADR_FORM,A3
  135.     OBJC_DRAW    A3,#0,#10,X_TUBE,Y_TUBE,W_TUBE,H_TUBE
  136.     MOVEQ    #0,D3
  137.     FORM_DO    A3,D3
  138. * La gestion est fini, avec quoi sommes-nous sortie ?
  139.     MOVE.W    D0,D3 sauve résultat
  140.     OBJECT    A3,D3,A0,D0
  141.     CMP.B    #26,7(A0)
  142.     BNE.S    .NOTBUT
  143.     BCLR    #0,11(A0)
  144. .NOTBUT    CMP.W    #NEXTTUBE,D3   suite de la liste?
  145.     BNE.S    NOT_NEXT     
  146. * Nous avons une demande pour poursuivre la recherche.
  147.     BSR    HIDE_ALL    re-cache les boutons (par défaut)
  148.     LEA    TAB_OKAPID,A0  tableau des apid par bouton
  149.     MOVE.L    A0,PTN_OKAPID
  150.     MOVE.W    #TUBE1,D7   premier bouton du formulaire
  151.     MOVE.W    (A4),D0    saute le séparateur 
  152.     CMP.W    #$00FF,D0  c'était la dernière phrase ?
  153.     BEQ    HOP        oui donc on charge un nouvel AP_ID
  154.     ADDA.L    #2,A4    Saut de separateur
  155.     BRA    NEXT_BUTTON  non --> continue le remplissage
  156.  
  157. NOT_NEXT    MOVE.W    D3,D7   sauve le choix (plus sur que D3)    
  158.     FORM_DIAL    #3,#0,#0,#0,#0,X_TUBE,Y_TUBE,W_TUBE,H_TUBE
  159.     CMP.W    #ANNUTUBE,D7    bouton annuler ?
  160.     BEQ.S    NO_CHOICETUBE    oui donc bye bye...
  161.  
  162. * Calculons quel bouton a été choisit pour piocher l'AP_ID
  163. * et l'identificateur dans le tableau TAB_OKAPID.
  164.     LEA    TAB_OKAPID,A0
  165.     MOVE.W    #TUBE1,D0
  166.     SUB.W    D0,D7     contient le choix bouton corrigé
  167.     LSL.W    #2,D7
  168.     MOVE.W    0(A0,D7.W),D0    APP_ID choisit
  169.     MOVE.W    2(A0,D7.W),D1    et l'identificateur
  170.     BRA.S    END_CHOICE
  171. * Rien de choisit ou rien de valable, nous l'indiquons
  172. NO_CHOICETUBE
  173.     MOVE.W    #$FFFF,D0    
  174.     MOVE.W    #$FFFF,D1    
  175. END_CHOICE  MOVEM.L    (SP)+,D2-D7/A1-A6
  176.     RTS
  177. *--------------------------------------------------------------------------*
  178. * Par défaut, nous cachons tous les boutons du formulaire
  179. HIDE_ALL    MOVEM.L    D0-D7/A0-A6,-(SP)
  180.     MOVE.L    ADR_FORM,A6
  181.     OBJECT    A6,#TUBE1,A0,D0
  182.     MOVE.W    #$80,8(A0)    
  183.     OBJECT    A6,#TUBE2,A0,D0
  184.     MOVE.W    #$80,8(A0)    
  185.     OBJECT    A6,#TUBE3,A0,D0
  186.     MOVE.W    #$80,8(A0)    
  187.     OBJECT    A6,#TUBE4,A0,D0
  188.     MOVE.W    #$80,8(A0)    
  189.     OBJECT    A6,#TUBE5,A0,D0
  190.     MOVE.W    #$80,8(A0)    
  191.     MOVEM.L    (SP)+,D0-D7/A0-A6
  192.     RTS
  193. *--------------------------------------------------------------------------*
  194.